package Streaming;

import java.util.stream.IntStream;

/**
 * @Author: 蔡翔
 * @Date: 2019/10/3 19:43
 * @Version 1.0
 */
public class StreamDemo1 {
    public static void main(String[] args) {
        int[] nums = {1,2,3};
        //外部迭代
        int sum = 0;
        for(int i:nums){
            sum+=i;
        }
        System.out.println("结果为："+sum);

        //使用stream来内部迭代
        // map 就是中间操作把nums数组中每隔数都乘以2，（就是中间操作，返回流的操作）
        int sum2 = IntStream.of(nums).map(i->i*2).sum();
        System.out.println("结果为："+sum2);


        // 中间操作和终止操作区别：就是看返回类型，只要返回的还是流就是中间操作否则就是终止操作
        System.out.println("惰性求值就是终止（终止操作类似于 .sum() ）， 没有调用的情况下，中间操作不会执行。");
        // 下面的 流 不会执行中间操作（这里的中间操作就是map()里面的方法，也就是doubleName方法），因为没有终止操作（类似于sum()的操作。）
        // 因为doubleName 返回的是 i*2;;所以可以是看成是一个实现了匿名接口的lambda表达式
        IntStream.of(nums).map(StreamDemo1::doubleName); //类名::方法名  就是静态方法引用。
    }
    public static int doubleName(int i){
        System.out.println("执行了乘以2");
        return i*2;
    }
}
